package com.aloda.service;

import com.aloda.dto.question.QuestionAddDTO;
import com.aloda.dto.question.QuestionContentDTO;
import com.aloda.dto.question.QuestionEditDTO;
import com.aloda.dto.question.QuestionGenerateDTO;
import com.aloda.entity.Question;
import com.aloda.query.QuestionPageDTO;
import com.aloda.result.PageResult;
import com.aloda.vo.question.QuestionContentVO;
import com.aloda.vo.question.QuestionGenerateVO;
import com.aloda.vo.question.QuestionListVO;
import com.aloda.vo.question.QuestionPageVO;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.List;

/**
* @author aloda
* @description 针对表【question(题目)】的数据库操作Service
* @createDate 2025-03-05 16:27:38
*/
public interface QuestionService extends IService<Question> {

    /**
     * 管理端新增题目
     * @param questionAddDTO
     * @return
     */
    long addQuestion(QuestionAddDTO questionAddDTO);

    /**
     * 分页查询
     * @param questionPageDTO
     * @return
     */
    PageResult<QuestionPageVO> pageQuery(QuestionPageDTO questionPageDTO);

    /**
     * 编辑题目
     * @param questionEditDTO
     */
    void editQuestion(QuestionEditDTO questionEditDTO);

    /**
     * 导出题目信息表格
     * @param response
     * @param ids
     */
    void exportQuestionToExcel(HttpServletResponse response, List<Long> ids);

    /**
     * 根据appId查询题目内容
     * @param id
     * @return
     */
    String getQuestionByAppId(Long id);

    /**
     * 新增/更新题目
     * @param questionAddDTO
     * @return
     */
    Long addQuestionByUser(QuestionAddDTO questionAddDTO);

    /**
     * 根据appId查询题目脱敏内容（开始答题的显示内容）
     * @param id
     * @return
     */
    QuestionListVO getQuestionSafetyInfoList(Long id);

    /**
     * 客户端AI生成题目
     * @param questionGenerateDTO
     * @return
     */
    SseEmitter aiGenerateQuestion(QuestionGenerateDTO questionGenerateDTO);

    /**
     * 保存AI生成的题目
     * @param questionAddDTO
     */
    long addGenerateQuestion(QuestionAddDTO questionAddDTO);
}
